[IA64] SMP_HOST: map pal code on smp host
authorawilliam@xenbuild.aw <awilliam@xenbuild.aw>
Fri, 24 Feb 2006 21:03:07 +0000 (14:03 -0700)
committerawilliam@xenbuild.aw <awilliam@xenbuild.aw>
Fri, 24 Feb 2006 21:03:07 +0000 (14:03 -0700)
On up host, only when rr7 is changed, efi_map_pal_code() is called to
remap pal code on new rr7. But on smp host, efi_map_pal_code is also
called to map pal code for other processors, which may not satisfy rr7
change condition, thus pal code may not be mapped in some processors,
while ia64_pal_halt_light called in startup_cpu_idle_loop will cause
machine crash.

Signed-off-by: Anthony Xu <anthony.xu@intel.com>
xen/arch/ia64/linux-xen/efi.c

index d42935ddeab656d2e362e653bfc1b3ac44ea005e..54a5c72541cb3fda8a16d11f5f7d0056cc430d52 100644 (file)
@@ -534,32 +534,9 @@ efi_map_pal_code (void)
 {
 #ifdef XEN
        u64 psr;
-       static unsigned long last_rr7 = 0;
-       unsigned long current_rr7 = ia64_get_rr(7L<<61);
-
-       // this routine is called only once in Linux but may be called
-       // multiple times in Xen.  However, we only need to flush and
-       // reset itr[IA64_TR_PALCODE] if rr7 changes
        if (!pal_vaddr) {
                pal_vaddr = efi_get_pal_addr ();
-               last_rr7 = current_rr7;
-       }
-       else if (last_rr7 == current_rr7) return;
-       else {
-               last_rr7 = current_rr7;
-               printk("efi_map_pal_code,remapping pal w/rr7=%lx\n",last_rr7);
        }
-
-       printf("efi_map_pal_code: about to ia64_ptr(%d,%p,%p)\n",
-               0x1, GRANULEROUNDDOWN((unsigned long) pal_vaddr),
-                IA64_GRANULE_SHIFT);
-       ia64_ptr(0x1, GRANULEROUNDDOWN((unsigned long) pal_vaddr),
-                IA64_GRANULE_SHIFT);
-       ia64_srlz_i();
-       printf("efi_map_pal_code: about to ia64_itr(%p,%p,%p,%p,%p)\n",
-               0x1, IA64_TR_PALCODE, GRANULEROUNDDOWN((unsigned long) pal_vaddr),
-                pte_val(pfn_pte(__pa(pal_vaddr) >> PAGE_SHIFT, PAGE_KERNEL)),
-                IA64_GRANULE_SHIFT);
 #else
        void *pal_vaddr = efi_get_pal_addr ();
        u64 psr;